public class 模板模式 {

    public static void main(String[] args) {
        // 创建咖啡和茶的对象
        Beverage coffee = new Coffee();
        Beverage tea = new Tea();

        // 准备咖啡
        System.out.println("准备咖啡:");
        coffee.prepareRecipe();  // 调用模板方法
        System.out.println();

        // 准备茶
        System.out.println("准备茶:");
        tea.prepareRecipe();  // 调用模板方法
    }
}
// 抽象类，定义了制作饮料的模板方法
 abstract class Beverage {

    // 模板方法，定义了制作饮料的步骤
    public final void prepareRecipe() {
        boilWater();              // 步骤1：烧水
        brew();                   // 步骤2：冲泡
        pourInCup();              // 步骤3：倒入杯中
        addCondiments();          // 步骤4：添加配料
    }

    // 基本方法，子类可以覆盖
    protected abstract void brew();               // 冲泡饮料，子类实现
    protected abstract void addCondiments();      // 添加配料，子类实现

    // 公共方法，通用实现
    private void boilWater() {
        System.out.println("烧开水");
    }

    private void pourInCup() {
        System.out.println("倒入杯中");
    }
}
//具体类
// 具体类：制作咖啡
 class Coffee extends Beverage {

    // 实现冲泡咖啡的具体步骤
    @Override
    protected void brew() {
        System.out.println("用热水冲泡咖啡");
    }

    // 实现添加咖啡配料的具体步骤
    @Override
    protected void addCondiments() {
        System.out.println("添加牛奶和糖");
    }
}
// 具体类：制作茶
 class Tea extends Beverage {

    // 实现冲泡茶的具体步骤
    @Override
    protected void brew() {
        System.out.println("用热水冲泡茶叶");
    }

    // 实现添加茶配料的具体步骤
    @Override
    protected void addCondiments() {
        System.out.println("添加柠檬");
    }
}